/*
  学习目标：泛型约束
  作用：指定更加精确的类型范围。
  理解：👍约束。 ---- 理解为：逻辑与， 不仅是xxx，还是xxx
  语法：<T extends Xxx> 
*/

interface ILength {
  length: number;
}

function fn<T extends ILength>(value: T): T {
  console.log(value.length);
  return value;
}

fn('a1231'); // string不报错
fn([123, 21313, 12313]); // 数组也不报错
fn({ length: 123 });
fn(false); // 报错
